package utils 
{
	import flash.utils.Dictionary;
	/**
	 * AS3模拟hashmap
	 * @author gcxk721
	 */
	public class QhHashMap 
	{
		/**
		 * 数据存储池
		 */
		private var m_map : Dictionary;
	
		public function QhHashMap() 
		{
			m_map = new Dictionary(true);
		}
		
		/**
		 * 往HASH表中放入值
		 * @param	key
		 * @param	value
		 */
		public function put(key : *, value : *) : void
		{
			m_map[key] = value;
		}
	
		/**
		 * 取得key对应的值
		 * @param	key
		 * @return
		 */
		public function getValue(key : * ) : *
		{
			return m_map[key];
		}
		
		/**
		 * 在HASH表中移除一个值
		 * @param	key
		 */
		public function remove(key : * ) : void
		{
			delete m_map[key];
		}
		
		/**
		 * 清空整张HASH表
		 */
		public function removeAll() : void
		{
			for (var key : * in m_map)
			{
				m_map[key] = null;
			}
			m_map = null;
			m_map = new Dictionary(true);
		}
		
		/**
		 * 返回HASH表中是否存在这样的键值
		 * @param	key
		 * @return
		 */
		public function containsKey(key : * ) : Boolean
		{
			return m_map[key] != null;
		}
		
		/**
		 * 返回HASH表中是否存在值
		 * @param	value
		 * @return
		 */
		public function containsValue(value : * ) : Boolean
		{
			for (var key : * in m_map)
			{
				if (m_map[key] == value)
				{
					return true;
				}
			}
			return false;
		}
		
		/**
		 * 取得当前HASH表中的所有key值
		 * @return
		 */
		public function getKeys() : Array
		{
			var keys : Array = [];
			for (var key : * in m_map)
			{
				keys.push(key);
			}
			return keys;
		}
		
		/**
		 * 取得当前HASH表中所有的值
		 * @return
		 */
		public function getValues() : Array
		{
			var values : Array = [];
            for (var key : * in m_map)
			{
				values.push(m_map[key]);
			}
			return values;
		}
		
	}

}